package com.Dec_Nineteen;

import java.util.Arrays;

/**
 * 2033. 获取单值网格的最小操作数
 * 给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x 。每一次操作，你可以对 grid 中的任一元素 加 x 或 减 x 。
 *
 * 单值网格 是全部元素都相等的网格。
 *
 * 返回使网格化为单值网格所需的 最小 操作数。如果不能，返回 -1 。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/minimum-operations-to-make-a-uni-value-grid
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/11/19 09:47
 */
public class Solution2033 {

    public int minOperations(int[][] grid, int x) {
        int n=grid.length,m=grid[0].length;
        int[] ans=new int[n*m];
        int k=0;
        for (int[] ints : grid) {
            for (int j = 0; j < m; j++) {
                ans[k++] = ints[j];
            }
        }
        Arrays.sort(ans);
        int mid=ans[n*m/2];
        int sum=0;
        for (int a:ans){
            int l=Math.abs(mid-a);
            if (l%x!=0) return -1;
            sum+=l/x;
        }
        return sum;
    }

    public static void main(String[] args) {
        Solution2033 solution2033=new Solution2033();
        System.out.println(solution2033.minOperations(new int[][]{{2,4},{6,8}},2));
    }

}
